//引入express模块
const express = require("express");
//引入连接池模块
const pool = require("../pool.js");
//console.log(pool);
//创建路由器对象
const r = express.Router();
//添加路由

//1.用户注册路由(post /reg)
//http://127.0.0.1:8080/v1/users/reg
r.post("/reg",(req,res,next)=>{
	//1.1获取post请求的数据
	let obj = req.body;
	console.log(obj);
	//1.2验证各项数据是否为空
	//1.2.1验证uname是否为空
	if(!obj.uname){
		//json方法将js对象转为json对象
		//json和send作用相同
		res.json({code: 401, msg: "uname不能为空"});
		//因为在函数内，要使用return阻止往后执行
		return;
	}
	//1.2.2验证upwd是否为空
	if(!obj.upwd){
		res.send({code: 402, msg: "upwd不能为空"});
		return;
	}
	//1.2.3验证email是否为空
	if(!obj.email){
		res.send({code: 403, msg: "email不能为空"});
		return;
	}
	//1.2.4验证phone是否为空
	if(!obj.phone){
		res.send({code: 404, msg: "phone不能为空"});
		return;
	}
	//验证手机号码的格式
	//正则表达式.test(手机号码)
	//如果手机号码格式不正确
	if(!/^1[3-9]\d{9}$/.test(obj.phone)){
		res.send({code: 405, msg: "手机号码格式不正确"});
		return;
	}
	//1.3执行SQL命令
	pool.query("insert into xz_user set ?",[obj],(err,result)=>{
		if(err){
			//如果数据库执行出现了错误，交给下一个错误处理的中间件执行
			next(err);
			//阻止往后执行
			return;
		}
		console.log(result);
	//表示插入成功
	    res.send({code: 200, msg: "注册成功"});
  });
});
//2.用户登录路由(post /login)
//http://127.0.0.1:8080/v1/users/login
r.post("/login",(req,res,next)=>{
	//2.1获取post传递的数据
	let obj = req.body;
	console.log(obj);
	//2.1验证各项数据是否为空
	//2.1.1验证uname是否为空
	if(!obj.uname){
		res.send({code: 401, msg: "uname不能为空"});
		return;
	}
	//2.1.2验证upwd是否为空
	if(!obj.upwd){
		res.send({code: 402, msg: "upwd不能为空"});
		return;
	}
	//1.3执行SQL命令
	pool.query("select * from xz_user where uname=? && upwd=?",[obj.uname,obj.upwd],(err,result)=>{
		if(err){
			//如果有错误，交给下一个中间件处理
			next(err);
			return;
		}
		console.log(result);
		//查询的结果是数组，如果是空数组，说明登录失败，否则为登录成功
		if(result.length === 0){
			res.send({code: 201, msg: "登录失败"});
		}else{
			res.send({code: 200, msg: "登录成功"});
	 }
  });
});
//3.修改用户(put /)
//http://127.0.0.1:8080/v1/users/
r.put("/",(req,res,next)=>{
	//3.1获取post传递的数据(uid、phone、user_name、gender)
	let obj = req.body;
	console.log(obj);
	//3.2验证各项数据是否为空
	let i = 400;
	for(let k in obj){
		//每次遍历一个属性，状态码加1
		i++
		//k：属性名  obj[k]：属性值
		//console.log(k,obj[k]);
		//如果属性值为空，提示属性名不能为空
		if(!obj[k]){
			res.send({code: i, msg: `${k}不能为空`});
			return;
		}
	}
	//3.3执行SQL命令，修改用户数据
	pool.query("update xz_user set ? where uid=?",[obj,obj.uid],(err,result)=>{
		if(err){
			//如果有错误，交给下一个错误处理中间件
			next(err);
			return;
		}
		console.log(result);
		//3.4结果是对象，如果对象下的affectedRows的值是0,说明修改失败，否则修改成功
		if(result.affectedRows === 0){
			res.send({code: 200, msg: "修改失败"});
		}else{
			res.send({code: 201, msg: "修改成功"});
	    }
    });
});

//4.查找用户(get /编号)
//http://127.0.0.1:8080/v1/users/编号
r.get("/:uid",(req,res,next)=>{
	//4.1路由传参获取传递的编号
	let obj = req.params;
	console.log(obj);
	//4.2执行SQL命令，查询编号对应的用户
	pool.query("select uid, uname, email, phone from xz_user where uid=?",[obj.uid],(err,result)=>{
		if(err){
			next(err);
			return;
		}
		console.log(result);
	//4.3如果没有查询到{code:201,msg:"该用户不存在"}，否则查询到{code:200,msg:"查询成功",data:[]}
	if(result.length === 0){
		res.send({code: 201, msg: "查询失败"});
	}else{
		res.send({code: 200, msg: "查询成功", data: result});
	}
  });
});

//5.删除员工(delete /编号)
//http://127.0.0.1:8080/v1/users/编号
r.delete("/:uid",(req,res,next)=>{
	//5.1获取传递的编号
	let obj = req.params;
	console.log(obj);
	//5.2执行SQL命令，删除编号对应的用户
	pool.query("delete from xz_user where uid=?",[obj.uid],(err,result)=>{
		if(err){
			next(err);
			return;
		}
		console.log(result);
		//5.3 结果为对象，如果对象下affectedRows的值为0，说明删除失败,响应{code:201,msg:"删除失败"},否则删除成功响应{code:200,msg:"删除成功"}
		if(result.affectedRows === 0){
			res.send({code: 201, msg: "删除失败"
			});
		}else{
			res.send({code: 200, msg: "删除成功"});
		}
	});
});

//6.用户列表(get /)
//http://127.0.0.1:8080/v1/users/
r.get("/",(req,res,next)=>{
	//6.1获取查询字符串传递的数据
	let obj = req.query;
	console.log(obj);
	//6.2验证是否为空，如果为空，设置默认值
	if(!obj.pno) obj.pno = 1;
	if(!obj.count) obj.count = 5;
	console.log(obj);
	//6.3计算开始查询的值
	let start = (obj.pno - 1) * obj.count;//隐式转换为数值型
	//6.4把每页的数据量转为整型
	let size = parseInt(obj.count);
	//6.5执行SQL命令(分页查询)
	pool.query("select uid, uname, email, phone from xz_user limit ?,?",[start,size],(err,result)=>{
		if(err){
			next(err);
			return;
		}
		console.log(result);
		//查询的结果是数组，把数组响应给浏览器
	    res.send({code: 200, msg: "查询成功"});
	});
});
//导出路由器对象
module.exports = r;